package juc.completablefuture.methods.and;

/**
 * @ClassName ThenCombineExample
 * @PackageName completablefuture.methods.and
 * @projectName myThread
 * @Description 
 * @Author games
 * @Date 2025/8/27 下午4:48
 * @Version 1.0
 */
import java.util.concurrent.CompletableFuture;

/**
 * 作用：任务合并，有返回值。
 * 返回值：一个新的 CompletableFuture，其结果是结合两个任务结果后的输出。
 */
public class ThenCombineExample {
/**
 * 主方法：演示CompletableFuture的异步编程和组合操作
 * 使用supplyAsync创建异步任务，使用thenCombine组合两个CompletableFuture的结果
 * 最后使用thenAccept处理并输出最终结果
 */
    public static void main(String[] args) {
    // 创建第一个异步任务，返回字符串"Hello"
        CompletableFuture<String> cf1 = CompletableFuture.supplyAsync(() -> "Hello");
    // 创建第二个异步任务，返回字符串"World"
        CompletableFuture<String> cf2 = CompletableFuture.supplyAsync(() -> "World");

    // 组合两个异步任务的结果，使用空格连接两个字符串
        CompletableFuture<String> combinedCF = cf1.thenCombine(cf2, (s1, s2) -> s1 + " " + s2);

    // 当组合任务完成时，打印结果"Hello World"
        combinedCF.thenAccept(System.out::println); // 输出: Hello World
    }
}
